package main

type Scores struct {
  chinese uint // 语文成绩
  math uint // 数学成绩
  english uint // 英语成绩
}

/*
 * TODO:
 * @description: 为Score结构体定义求成绩总和的方法
 * @param {Scores} s Scores结构体
 * @return {uint} 总成绩
*/
func (s Scores) sum() uint {
  return s.chinese+s.math+s.english
}

type Student struct {
    id uint // 学号
    name string // 姓名
  scores Scores // 成绩 
}

/**
 * TODO:
 * @description: 找出切片中成绩最高的同学
 * @param {[]Student} students 全部学生的切片
 * @return {Student} 最高分结构体
 */
func No1(students []Student) Student {
	 s:=Student{0,"",Scores{}}
	for _,v:=range students{
		if v.scores.sum()>s.scores.sum() {s=v}
	}
    return s
	// 定义空Student, 遍历Students切片, 查看成绩是否大于新建的Student, 大于则覆盖,不大于则下一个
}


func main(){
  // 新建三个同学
  students := []Student{
    Student{2010020115,"王山而",Scores{96,84,90}},
        Student{1903060321,"卢成朋",Scores{103,92,121}},
        Student{1903060320,"王海燕",Scores{99,113,103}},
  }
    // 遍历每个同学, 打印出他们的分数
    for _,student := range students {
        println(student.name,": ",student.scores.sum())
    }
    // 计算最高分并打印
    print("最高分为: ", No1(students).name)
}

/* 输出:
王山而 :  270
卢成朋 :  316
王海燕 :  315
最高分为: 卢成朋
*/